"""
位置参数
关键字参数
缺省参数
不定长参数
... ...

位置参数：调用函数时根据函数定义的参数位置来传递参数 --- 传递的参数和定义的参数的顺序及个数必需一致

关键字参数：函数调用时通过"键=值"形式传递参数
作用：可以让函数更加清晰、容易使用，同时也清除了参数的顺序要求
函数调用时，如果有位置参数时，位置参数必须在关键字参数的前面，但关键字参数之间不存在先后顺序

缺省参数：也叫默认参数，用于定义函数，为参数提供默认值，调用函数时可不传该默认参数的值
所有位置参数必须出现在默认参数前，包含函数定义和调用
当调用函数时没有传递参数，就会使用默认是用缺省参数对应的值
函数调用时，如果为缺省参数传值则修改默认参数值，否则使用这个默认值

不定长参数：也叫可变参数，用于不确定调用的时候会传递多少个参数（不传参也可以）的场景
当调用函数时不确定参数个数时，可以使用不定长参数
不定长参数类型：
    位置传递
    关键字传递
位置传递：
    def user_info(*args):
        print(args)
    传进的所有参数都会被args变量收集，它会根据传进参数的位置合并为一个元组(tuple)，args是元组类型
关键字传递：
    def user_info(**kwargs):
        print(kwargs)
    参数是"键=值"形式的情况下，所有的"键=值"
    参数是"键=值"形式的情况下，所有的"键=值"都会被kwargs接受，同时会根据"键=值"组成字典
"""


def user_info(name, age, gender):
    print(f"姓名：{name}，年龄：{age}，性别：{gender}")


# 位置参数 - 默认使用方式
user_info("小明", 18, "男")

# 关键字参数
user_info(name="小明", age=18, gender="男")
user_info(age=18, gender="男", name="鲁班七号")
user_info("凯爹", gender="男", age=18)


# 缺省参数（默认值）
def user_info(name, age, gender="男"):
    print(f"姓名：{name}，年龄：{age}，性别：{gender}")


user_info('小天', 13)
user_info('小天', 13, "女")


# 不定长 - 位置不定长，*号
def user_info(*args):
    print(f"args的参数类型是：{type(args)}，内容是：{args}")


user_info(1, 2, 3, "小明", "鲁班七号")


# 不定长 - 关键字不定长，**号
def user_info(**kwargs):
    print(f"args的参数类型是：{type(kwargs)}，内容是：{kwargs}")


user_info(name="小明", age=18, gender="男")
